archivo <- './data/Datos-dax-nasdaq-originales.xlsx'
dax_nasdaq_dow <- read_excel(archivo, col_names = TRUE)
names(dax_nasdaq_dow)
## [1] "Fecha" "DAX 30 PERFORMANCE - PRICE INDEX"
## [3] "NASDAQ COMPOSITE - PRICE INDEX"
names(dax_nasdaq_dow) <- c("Fecha", "DAX", "NASDAQ")
names(dax_nasdaq_dow)
## [1] "Fecha" "DAX" "NASDAQ"
summary(dax_nasdaq_dow)
## Fecha DAX NASDAQ
## Min. :1971-02-05 00:00:00 Min. : 372.3 Min. : 54.87
## 1st Qu.:1983-07-21 18:00:00 1st Qu.: 710.9 1st Qu.: 247.13
## Median :1996-01-04 12:00:00 Median : 2320.2 Median : 1057.44
## Mean :1996-01-05 02:24:00 Mean : 4048.6 Mean : 1877.67
## 3rd Qu.:2008-06-19 06:00:00 3rd Qu.: 6351.3 3rd Qu.: 2508.07
## Max. :2020-12-03 00:00:00 Max. :13789.0 Max. :12377.18
indice_dax <- as.numeric(unlist(dax_nasdaq_dow[,"DAX"]))
rend_log_dax <- diff(log(indice_dax))
#agrego un 0 al principio para poder agregar la columna de rendimientos al dataframe original
rend_log_dax <- c(0, rend_log_dax)
indice_nasdaq <- as.numeric(unlist(dax_nasdaq_dow[,"NASDAQ"]))
rend_log_nasdaq <- diff(log(indice_nasdaq))
#agrego un NA al principio para poder agregar la columna de rendimientos al dataframe original
rend_log_nasdaq <- c(0, rend_log_nasdaq)
df_dax_nasdaq_dow <- cbind(dax_nasdaq_dow,
rdto_dax=rend_log_dax,
rdto_nasdaq=rend_log_nasdaq
)
# reordenamos columnas
df_dax_nasdaq_dow <- df_dax_nasdaq_dow[, c(1, 2, 4, 3, 5)]
head(df_dax_nasdaq_dow)
Estadísticas principales del dataset.
summary(df_dax_nasdaq_dow)
## Fecha DAX rdto_dax
## Min. :1971-02-05 00:00:00 Min. : 372.3 Min. :-0.1370990
## 1st Qu.:1983-07-21 18:00:00 1st Qu.: 710.9 1st Qu.:-0.0055691
## Median :1996-01-04 12:00:00 Median : 2320.2 Median : 0.0002207
## Mean :1996-01-05 02:24:00 Mean : 4048.6 Mean : 0.0002508
## 3rd Qu.:2008-06-19 06:00:00 3rd Qu.: 6351.3 3rd Qu.: 0.0065904
## Max. :2020-12-03 00:00:00 Max. :13789.0 Max. : 0.1079747
## NASDAQ rdto_nasdaq
## Min. : 54.87 Min. :-0.1314915
## 1st Qu.: 247.13 1st Qu.:-0.0041536
## Median : 1057.44 Median : 0.0007315
## Mean : 1877.67 Mean : 0.0003706
## 3rd Qu.: 2508.07 3rd Qu.: 0.0058327
## Max. :12377.18 Max. : 0.1325465
Estadísticas más completas del rendimiento del índice NASDAQ
#Cálculo simple de estadísticos descriptivos
min <- min(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
q1 <- quantile(df_dax_nasdaq_dow$rdto_nasdaq, probs = 0.25, na.rm = TRUE)
media <- mean.default(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
media_rec <- mean.default(df_dax_nasdaq_dow$rdto_nasdaq, trim = 0.025, na.rm = TRUE)
mediana <- median.default(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
moda <- mfv(df_dax_nasdaq_dow$rdto_nasdaq)
var <- var(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
desvest <- sd(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
q3 <- quantile(df_dax_nasdaq_dow$rdto_nasdaq, probs = 0.75, na.rm = TRUE)
max <- max(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
s <- skew(df_dax_nasdaq_dow$rdto_nasdaq)
c <- kurtosi(df_dax_nasdaq_dow$rdto_nasdaq)
#Valores de estadísticos como vector
descriptivos_rdto_nasdaq <- as.numeric(round(c(min, q1, media, media_rec, mediana, moda,
var, desvest, q3, max, s, c),5))
nombres_desc_rdto_nasdaq <- c("Mínimo", "Q1", "Media", "Media recortada", "Mediana", "Moda",
"Varianza", "Desviación Estándar", "Q3", "Máximo", "Simetría", "Curtosis")
cuadro_eda_nasdaq <- as.data.frame(rbind(nombres_desc_rdto_nasdaq,descriptivos_rdto_nasdaq))
tabla_eda_nasdaq <- data.frame(t(cuadro_eda_nasdaq[-1]),row.names = NULL)
colnames(tabla_eda_nasdaq) <- c("Estadístico","rdto_nasdaq")
#tabla_eda_nasdaq
# Generación de una tabla
kable(tabla_eda_nasdaq, align = c("l", "c")) %>%
kable_styling(full_width = F, bootstrap_options = "condensed") %>%
column_spec(1, width = "12em") %>%
column_spec(2, width = "10em")
| Estadístico | rdto_nasdaq |
|---|---|
| Q1 | -0.00415 |
| Media | 0.00037 |
| Media recortada | 0.00047 |
| Mediana | 0.00073 |
| Moda | 0 |
| Varianza | 0.00015 |
| Desviación Estándar | 0.01231 |
| Q3 | 0.00583 |
| Máximo | 0.13255 |
| Simetría | -0.38931 |
| Curtosis | 10.88228 |
Se agregan las columnas correspondientes a los días de la semana.
df_dax_nasdaq_dow <- as_tibble(df_dax_nasdaq_dow)
df_dax_nasdaq_dow <- mutate(df_dax_nasdaq_dow,
dia = weekdays(df_dax_nasdaq_dow$Fecha, abbreviate = FALSE)
)
df_dax_nasdaq_dow$dia[df_dax_nasdaq_dow$dia == "miércoles"] <- "miercoles"
head(df_dax_nasdaq_dow)
Se ordenan los días de la semana.
## [1] "viernes" "lunes" "martes" "miercoles" "jueves"
## [1] "lunes" "martes" "miercoles" "jueves" "viernes"
Se generan valores binarios para los días de la semana.
df_dax_nasdaq_dow_dummies <- df_dax_nasdaq_dow %>%
mutate(var = 1) %>% # Asigno un 1 en todas las filas de una columna
spread(key = dia, value = var, fill = 0) %>% # Creo las variables dummy
# Reordeno y elimino lunes
dplyr::select(Fecha, DAX, rdto_dax, NASDAQ, rdto_nasdaq, martes, miercoles, jueves, viernes)
head(df_dax_nasdaq_dow_dummies)
Para el cálculo de la regresión se descartan las columnas Fecha, DAX y NASDAQ, quedando seleccionadas solamente las columnas de los días y la correspondiente al Rendimiento NASDAQ.
analysis_nasdaq <- df_dax_nasdaq_dow_dummies %>% dplyr::select(-Fecha,-DAX,-NASDAQ,-rdto_dax)
head(analysis_nasdaq)
Se calculan los valores de correlación entre los días de la semana y el rendimiento.
cor(analysis_nasdaq)
## rdto_nasdaq martes miercoles jueves viernes
## rdto_nasdaq 1.00000000 -0.01058179 0.02816619 0.01754642 0.01622782
## martes -0.01058179 1.00000000 -0.25000000 -0.25000000 -0.25000000
## miercoles 0.02816619 -0.25000000 1.00000000 -0.25000000 -0.25000000
## jueves 0.01754642 -0.25000000 -0.25000000 1.00000000 -0.25000000
## viernes 0.01622782 -0.25000000 -0.25000000 -0.25000000 1.00000000
Se observa una correlación negativa del día martes.
library(GGally)
ggpairs(analysis_nasdaq, lower = list(continuous = "smooth"),
diag = list(continuous = "barDiag"), axisLabels = "none")
Se genera la regresión lineal con el objetivo de explicar los valores de rdto_nasdaq en base a las variables dicotómicas independientes correspondientes a los días de la semana. En este caso se tiene la ecuación \(R_t = \beta_2 M_t + \beta_3 X_t + \beta_4 J_t + \beta_5 V_t + \epsilon_t\) Las variables \(M_t\), \(X_t\), \(J_t\) y \(V_t\) son las variables dummy asociadas a los días de la semana, tomando valor 1 si la observación corresponde a dicho día y 0 en otro caso. Los coeficientes \(\beta_2, \beta_3, \beta_4\) y \(\beta_5\) representan los rendimientos medios de cada día. El término de error se representa mediante \(\epsilon_t\). En este caso se han considerado 4 variables dummys correspondientes a los días martes, miércoles, jueves y viernes para tratar de explicar la variabilidad de los rendimientos tomando como base el día lunes.
Se configura y ejecuta el modelo.
full_model_nasdaq <- lm(rdto_nasdaq ~ martes + miercoles + jueves + viernes, data = analysis_nasdaq)
summary(full_model_nasdaq)
##
## Call:
## lm(formula = rdto_nasdaq ~ martes + miercoles + jueves + viernes,
## data = analysis_nasdaq)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.130597 -0.004545 0.000623 0.005414 0.131482
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.0008941 0.0002411 -3.708 0.00021 ***
## martes 0.0010042 0.0003410 2.945 0.00324 **
## miercoles 0.0019584 0.0003410 5.743 9.51e-09 ***
## jueves 0.0016968 0.0003410 4.976 6.57e-07 ***
## viernes 0.0016644 0.0003410 4.881 1.07e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01229 on 12995 degrees of freedom
## Multiple R-squared: 0.003291, Adjusted R-squared: 0.002985
## F-statistic: 10.73 on 4 and 12995 DF, p-value: 1.114e-08
En base a los resultados del modelo se ve que los regresores externos son significativos para explicar la volatilidad de los rendimientos de NASDAQ. Se observa que el día martes tiene un poder explicativo algo menor (0.1%) comparado con los días miércoles, jueves y viernes (0.2%).
#El modelo con las 4 variables dummys introducidas como predictores tiene un valor de \(R_2\) bajo (0.003291). #El p-value del estadístico F es significativo (1.114e-08).
En los resultados se observa que todos los p-value de la prueba de hipótesis del estadístico t son significativos.
Si se aplica la estrategia de stepwise mixto para selección de los mejores predictores confirma que el modelo configurado es adecuado.
step(object = full_model_nasdaq, direction = "both", trace = 1)
## Start: AIC=-114357.8
## rdto_nasdaq ~ martes + miercoles + jueves + viernes
##
## Df Sum of Sq RSS AIC
## <none> 1.9644 -114358
## - martes 1 0.0013108 1.9657 -114351
## - viernes 1 0.0036011 1.9680 -114336
## - jueves 1 0.0037430 1.9681 -114335
## - miercoles 1 0.0049857 1.9694 -114327
##
## Call:
## lm(formula = rdto_nasdaq ~ martes + miercoles + jueves + viernes,
## data = analysis_nasdaq)
##
## Coefficients:
## (Intercept) martes miercoles jueves viernes
## -0.0008941 0.0010042 0.0019584 0.0016968 0.0016644
confint(full_model_nasdaq)
## 2.5 % 97.5 %
## (Intercept) -0.0013667284 -0.0004214548
## martes 0.0003357480 0.0016725666
## miercoles 0.0012899427 0.0026267613
## jueves 0.0010284238 0.0023652424
## viernes 0.0009959523 0.0023327709
Se generan los vectores de rendimiento para NASDAQ y los vectores de los días martes a viernes.
n <- nrow(df_dax_nasdaq_dow_dummies)
rdto_nasdaq <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"rdto_nasdaq"]))
vardias_ma <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"martes"]))
vardias_mi <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"miercoles"]))
vardias_ju <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"jueves"]))
vardias_vi <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"viernes"]))
vardias <- cbind(vardias_ma,vardias_mi,vardias_ju,vardias_vi)
Se prueban distintos modelos para analizarlos, se analizan si los residuos son ruido blanco y se seleccionan los modelos mas adecuados.
spec_nasdaq1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq1 <- ugarchfit(spec=spec_nasdaq1,data=rdto_nasdaq)
spec_nasdaq1_2er <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq1_2er <- ugarchfit(spec=spec_nasdaq1_2er,data=rdto_nasdaq)
spec_nasdaq2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq2 <- ugarchfit(spec=spec_nasdaq2,data=rdto_nasdaq)
spec_nasdaq2_2er <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq2_2er <- ugarchfit(spec=spec_nasdaq2_2er,data=rdto_nasdaq)
spec_nasdaq3 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq3 <- ugarchfit(spec=spec_nasdaq3,data=rdto_nasdaq)
spec_nasdaq3_2er <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq3_2er <- ugarchfit(spec=spec_nasdaq3_2er,data=rdto_nasdaq)
spec_nasdaq4 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq4 <- ugarchfit(spec=spec_nasdaq4,data=rdto_nasdaq)
spec_nasdaq4_2er <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq4_2er <- ugarchfit(spec=spec_nasdaq4_2er,data=rdto_nasdaq)
spec_nasdaq5 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq5 <- ugarchfit(spec=spec_nasdaq5,data=rdto_nasdaq)
spec_nasdaq5_2er <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq5_2er <- ugarchfit(spec=spec_nasdaq5_2er,data=rdto_nasdaq)
spec_nasdaq6 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq6 <- ugarchfit(spec=spec_nasdaq6,data=rdto_nasdaq)
spec_nasdaq6_2er <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq6_2er <- ugarchfit(spec=spec_nasdaq6_2er,data=rdto_nasdaq)
spec_nasdaq1_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq1_ar1 <- ugarchfit(spec=spec_nasdaq1_ar1,data=rdto_nasdaq)
spec_nasdaq1_2er_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq1_2er_ar1 <- ugarchfit(spec=spec_nasdaq1_2er_ar1,data=rdto_nasdaq)
spec_nasdaq2_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq2_ar1 <- ugarchfit(spec=spec_nasdaq2_ar1,data=rdto_nasdaq)
spec_nasdaq2_2er_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq2_2er_ar1 <- ugarchfit(spec=spec_nasdaq2_2er_ar1,data=rdto_nasdaq)
spec_nasdaq3_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq3_ar1 <- ugarchfit(spec=spec_nasdaq3_ar1,data=rdto_nasdaq)
spec_nasdaq3_2er_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_nasdaq3_2er_ar1 <- ugarchfit(spec=spec_nasdaq3_2er_ar1,data=rdto_nasdaq)
spec_nasdaq4_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq4_ar1 <- ugarchfit(spec=spec_nasdaq4_ar1,data=rdto_nasdaq)
spec_nasdaq4_2er_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq4_2er_ar1 <- ugarchfit(spec=spec_nasdaq4_2er_ar1,data=rdto_nasdaq)
spec_nasdaq5_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq5_ar1 <- ugarchfit(spec=spec_nasdaq5_ar1,data=rdto_nasdaq)
#Se realiza el test de Ljung-Box sobre los residuos del modelo
#Ljung-Box
resid.arch <- as.numeric(residuals(garch_nasdaq5_ar1, standardize=TRUE))
lb_lag1 <- Box.test(resid.arch, lag=1, type="Ljung-Box", fitdf=0)
lb_lag2 <- Box.test(resid.arch, lag=2, type="Ljung-Box", fitdf=0)
lb_lag5 <- Box.test(resid.arch, lag=5, type="Ljung-Box", fitdf=0)
# creo un tibble con el resumen del modelo y los valores de Ljung-Box
t_comp_lb_nasdaq5_ar1 <- tibble(vmodel = garch_nasdaq5_ar1@model[["modeldesc"]][["vmodel"]],
vp = garch_nasdaq5_ar1@model[["modelinc"]][["alpha"]],
vq = garch_nasdaq5_ar1@model[["modelinc"]][["beta"]],
vxreg = garch_nasdaq5_ar1@model[["modelinc"]][["vxreg"]],
mp = garch_nasdaq5_ar1@model[["modelinc"]][["ar"]],
mq = garch_nasdaq5_ar1@model[["modelinc"]][["ma"]],
mxreg = garch_nasdaq5_ar1@model[["modelinc"]][["mxreg"]],
dist = garch_nasdaq5_ar1@model[["modeldesc"]][["distribution"]],
lb1 = lb_lag1$p.value,
lb2 = lb_lag2$p.value,
lb5 = lb_lag5$p.value,
ic1 = infocriteria(garch_nasdaq5_ar1)[1]
)
# agrego linea de resumen del modelo y muestro la tabla
t_comp_lb <- rbind(t_comp_lb,t_comp_lb_nasdaq5_ar1)
rownames(t_comp_lb) <- c("garch_nasdaq1","garch_nasdaq1_2er","garch_nasdaq2","garch_nasdaq2_2er",
"garch_nasdaq3","garch_nasdaq3_2er","garch_nasdaq4","garch_nasdaq4_2er",
"garch_nasdaq5","garch_nasdaq5_2er","garch_nasdaq6","garch_nasdaq6_2er",
"garch_nasdaq1_ar1","garch_nasdaq1_2er_ar1","garch_nasdaq2_ar1","garch_nasdaq2_2er_ar1",
"garch_nasdaq3_ar1","garch_nasdaq3_2er_ar1","garch_nasdaq4_ar1","garch_nasdaq4_2er_ar1",
"garch_nasdaq5_ar1")
# kable(t_comp_lb, row.names = TRUE)
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
# t_resumen_lb <- knitr::kable(t_comp_lb,
# digits = 6,
# caption = "Resumen del modelo y Ljung-Box test", booktabs = TRUE) %>%
# kable_styling(font_size = 12)
# column_spec(t_resumen_lb, 1:12, width = "2em")#, bold = TRUE, italic = TRUE)
spec_nasdaq5_2er_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq5_2er_ar1 <- ugarchfit(spec=spec_nasdaq5_2er_ar1,data=rdto_nasdaq)
spec_nasdaq6_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq6_ar1 <- ugarchfit(spec=spec_nasdaq6_ar1,data=rdto_nasdaq)
spec_nasdaq6_2er_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_nasdaq6_2er_ar1 <- ugarchfit(spec=spec_nasdaq6_2er_ar1,data=rdto_nasdaq)
| vmodel | vp | vq | vxreg | mp | mq | mxreg | dist | lb1 | lb2 | lb5 | ic1 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| garch_nasdaq1 | sGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.592634 |
| garch_nasdaq1_2er | sGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.312623 |
| garch_nasdaq2 | gjrGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.599331 |
| garch_nasdaq2_2er | gjrGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.598722 |
| garch_nasdaq3 | eGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.599416 |
| garch_nasdaq3_2er | eGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.600576 |
| garch_nasdaq4 | sGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.535743 |
| garch_nasdaq4_2er | sGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.535131 |
| garch_nasdaq5 | gjrGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.451319 |
| garch_nasdaq5_2er | gjrGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.546925 |
| garch_nasdaq6 | eGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.547122 |
| garch_nasdaq6_2er | eGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.548609 |
| garch_nasdaq1_ar1 | sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.316185 |
| garch_nasdaq1_2er_ar1 | sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.123425 | 0.040525 | 0.000185 | -6.612414 |
| garch_nasdaq2_ar1 | gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.532617 | 0.155750 | 0.001150 | -6.620320 |
| garch_nasdaq2_2er_ar1 | gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.524547 | 0.154552 | 0.001100 | -6.619718 |
| garch_nasdaq3_ar1 | eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.611984 | 0.237821 | 0.000950 | -6.620650 |
| garch_nasdaq3_2er_ar1 | eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.522935 | 0.209618 | 0.000874 | -6.622143 |
| garch_nasdaq4_ar1 | sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.889061 | 0.181313 | 0.001083 | -6.555544 |
| garch_nasdaq4_2er_ar1 | sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.838116 | 0.175989 | 0.001018 | -6.554935 |
| garch_nasdaq5_ar1 | gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.446337 | 0.151454 | 0.000560 | -6.568670 |
| garch_nasdaq5_2er_ar1 | gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.447147 | 0.151573 | 0.000561 | -6.568061 |
| garch_nasdaq6_ar1 | eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.422174 | 0.170781 | 0.000306 | -6.568404 |
| garch_nasdaq6_2er_ar1 | eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.518762 | 0.182988 | 0.000333 | -6.569748 |
t_resumen_lb
| vmodel | vp | vq | vxreg | mp | mq | mxreg | dist | lb1 | lb2 | lb5 | ic1 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| garch_nasdaq1 | sGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.592634 |
| garch_nasdaq1_2er | sGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.312623 |
| garch_nasdaq2 | gjrGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.599331 |
| garch_nasdaq2_2er | gjrGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.598722 |
| garch_nasdaq3 | eGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.599416 |
| garch_nasdaq3_2er | eGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.600576 |
| garch_nasdaq4 | sGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.535743 |
| garch_nasdaq4_2er | sGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.535131 |
| garch_nasdaq5 | gjrGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.451319 |
| garch_nasdaq5_2er | gjrGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.546925 |
| garch_nasdaq6 | eGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.547122 |
| garch_nasdaq6_2er | eGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000000 | -6.548609 |
| garch_nasdaq1_ar1 | sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000000 | -6.316185 |
| garch_nasdaq1_2er_ar1 | sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.123425 | 0.040525 | 0.000185 | -6.612414 |
| garch_nasdaq2_ar1 | gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.532617 | 0.155750 | 0.001150 | -6.620320 |
| garch_nasdaq2_2er_ar1 | gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.524547 | 0.154552 | 0.001100 | -6.619718 |
| garch_nasdaq3_ar1 | eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.611984 | 0.237821 | 0.000950 | -6.620650 |
| garch_nasdaq3_2er_ar1 | eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.522935 | 0.209618 | 0.000874 | -6.622143 |
| garch_nasdaq4_ar1 | sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.889061 | 0.181313 | 0.001083 | -6.555544 |
| garch_nasdaq4_2er_ar1 | sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.838116 | 0.175989 | 0.001018 | -6.554935 |
| garch_nasdaq5_ar1 | gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.446337 | 0.151454 | 0.000560 | -6.568670 |
| garch_nasdaq5_2er_ar1 | gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.447147 | 0.151573 | 0.000561 | -6.568061 |
| garch_nasdaq6_ar1 | eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.422174 | 0.170781 | 0.000306 | -6.568404 |
| garch_nasdaq6_2er_ar1 | eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.518762 | 0.182988 | 0.000333 | -6.569748 |
tabla_ljung_box <- as_tibble(t_comp_lb)
tabla <- tabla_ljung_box %>% filter(lb1 > 0.05, lb2 > 0.05)#, lb5 > 0.05)
tabla <- arrange(tabla, desc(ic1))
# tabla con valores de Ljung Box adecuados
t_resumen_lb <- knitr::kable(tabla,
digits = 6,
caption = "Modelos con valores adecuados del Ljung-Box test", booktabs = TRUE) %>%
kable_styling(font_size = 11)
column_spec(t_resumen_lb, 1:10, width = "7em")#, bold = TRUE, italic = TRUE)
| vmodel | vp | vq | vxreg | mp | mq | mxreg | dist | lb1 | lb2 | lb5 | ic1 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.838116 | 0.175989 | 0.001018 | -6.554935 |
| sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.889061 | 0.181313 | 0.001083 | -6.555544 |
| gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.447147 | 0.151573 | 0.000561 | -6.568061 |
| eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.422174 | 0.170781 | 0.000306 | -6.568404 |
| gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.446337 | 0.151454 | 0.000560 | -6.568670 |
| eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.518762 | 0.182988 | 0.000333 | -6.569748 |
| gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.524547 | 0.154552 | 0.001100 | -6.619718 |
| gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.532617 | 0.155750 | 0.001150 | -6.620320 |
| eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.611984 | 0.237821 | 0.000950 | -6.620650 |
| eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.522935 | 0.209618 | 0.000874 | -6.622143 |
vmodel= modelo GARCH implementado.
vp= componente ARCH del modelo de la varianza.
vq= componente GARCH del modelo de la varianza.
vxreg= cantidad de regresores externos en el modelo de la varianza.
mp= componente AR del modelo de la media.
mq= componente MA del modelo de la media.
mxreg= cantidad de regresores externos en el modelo de la media.
dist= distribución que siguen los errores.
lb1= valor del test de Ljung-Box para el rezago uno.
lb2= valor del test de Ljung-Box para el rezago dos.
lb5= valor del test de Ljung-Box para el rezago cinco.
ic1= valor de akaike del modelo.
Para poder analizar los modelos y elegir el mejor, debemos observar los valores del test de Ljung-Box y el de los criterios de información. En el caso del test de Ljung-Box buscamos un valor mayor a 0.05 que nos indique que los residuos del modelo son ruido blanco y no contienen información significativa. En la tabla se observan solo los modelos que cumplen con este filtro. Se muestran los valores del test para los rezagos uno, dos y cinco (lb1, lb2, lb5). Respecto a los criterios de información, en la tabla se muestra el valor de akaike de los modelos (ic1). El mejor modelo es el modelo con menor valor de akaike, por ello la tabla se encuentra ordenada de forma descendiente de acuerdo a este valor.
Siguiendo estas indicaciones se puede observar que los dos mejores modelos son:
1_ eGARCH con GARCH(1,1), ARMA(1,0), distribucion std y ER en media y varianza (garch_nasdaq3_2er_ar1)
2_ eGARCH con GARCH(1,1), ARMA(1,0), distribucion std y ER solo en media (garch_nasdaq3_ar1)
Parámetros de los dos mejores modelos y sus valores de significancia:
garch_nasdaq3_2er_ar1
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : eGARCH(1,1)
## Mean Model : ARFIMA(1,0,0)
## Distribution : std
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000476 0.000132 -3.60591 0.000311
## ar1 0.152379 0.008952 17.02139 0.000000
## mxreg1 0.000694 0.000175 3.96135 0.000075
## mxreg2 0.001864 0.000195 9.54566 0.000000
## mxreg3 0.001754 0.000176 9.95558 0.000000
## mxreg4 0.002096 0.000172 12.21316 0.000000
## omega 0.034641 0.045165 0.76700 0.443083
## alpha1 -0.069909 0.005401 -12.94409 0.000000
## beta1 0.988178 0.000346 2859.51045 0.000000
## gamma1 0.188443 0.001701 110.75611 0.000000
## vxreg1 -0.073706 0.078599 -0.93774 0.348377
## vxreg2 -0.191688 0.063771 -3.00587 0.002648
## vxreg3 -0.208510 0.063876 -3.26428 0.001097
## vxreg4 -0.265811 0.078080 -3.40434 0.000663
## shape 6.145769 0.327160 18.78523 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000476 0.000143 -3.32395 0.000888
## ar1 0.152379 0.011520 13.22692 0.000000
## mxreg1 0.000694 0.000178 3.89534 0.000098
## mxreg2 0.001864 0.000205 9.08709 0.000000
## mxreg3 0.001754 0.000171 10.24597 0.000000
## mxreg4 0.002096 0.000185 11.32691 0.000000
## omega 0.034641 0.048277 0.71756 0.473029
## alpha1 -0.069909 0.005739 -12.18174 0.000000
## beta1 0.988178 0.000434 2275.07780 0.000000
## gamma1 0.188443 0.003199 58.91425 0.000000
## vxreg1 -0.073706 0.082595 -0.89237 0.372194
## vxreg2 -0.191688 0.065643 -2.92016 0.003499
## vxreg3 -0.208510 0.065434 -3.18656 0.001440
## vxreg4 -0.265811 0.079485 -3.34417 0.000825
## shape 6.145769 0.358107 17.16181 0.000000
##
## LogLikelihood : 43055.62
##
## Information Criteria
## ------------------------------------
##
## Akaike -6.6221
## Bayes -6.6135
## Shibata -6.6221
## Hannan-Quinn -6.6193
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.4081 0.5229353
## Lag[2*(p+q)+(p+q)-1][2] 1.7665 0.3041917
## Lag[4*(p+q)+(p+q)-1][5] 10.1209 0.0009715
## d.o.f=1
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 17.61 2.706e-05
## Lag[2*(p+q)+(p+q)-1][5] 18.47 5.086e-05
## Lag[4*(p+q)+(p+q)-1][9] 20.63 1.378e-04
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.0476 0.500 2.000 0.8273
## ARCH Lag[5] 0.2162 1.440 1.667 0.9616
## ARCH Lag[7] 2.6877 2.315 1.543 0.5744
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 57.454
## Individual Statistics:
## mu 0.5417
## ar1 39.9615
## mxreg1 0.5313
## mxreg2 0.1763
## mxreg3 0.2120
## mxreg4 1.6909
## omega 2.8712
## alpha1 6.3345
## beta1 2.6511
## gamma1 0.3574
## vxreg1 3.0117
## vxreg2 2.8854
## vxreg3 3.1181
## vxreg4 2.7214
## shape 0.7413
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 3.26 3.54 4.07
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 2.6365 0.0083860 ***
## Negative Sign Bias 0.8207 0.4118308
## Positive Sign Bias 0.9750 0.3295864
## Joint Effect 21.5350 0.0000815 ***
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 157.1 9.213e-24
## 2 30 200.4 1.559e-27
## 3 40 210.2 2.520e-25
## 4 50 220.5 1.320e-23
##
##
## Elapsed time : 20.51626
garch_nasdaq3_ar1
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : eGARCH(1,1)
## Mean Model : ARFIMA(1,0,0)
## Distribution : std
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000465 0.000096 -4.8281 1.0e-06
## ar1 0.151054 0.008843 17.0825 0.0e+00
## mxreg1 0.000684 0.000160 4.2708 1.9e-05
## mxreg2 0.001846 0.000158 11.7083 0.0e+00
## mxreg3 0.001731 0.000155 11.1508 0.0e+00
## mxreg4 0.002091 0.000148 14.1688 0.0e+00
## omega -0.112287 0.002777 -40.4416 0.0e+00
## alpha1 -0.069959 0.005411 -12.9291 0.0e+00
## beta1 0.988273 0.000340 2904.4355 0.0e+00
## gamma1 0.188426 0.001753 107.5179 0.0e+00
## shape 6.130714 0.326096 18.8003 0.0e+00
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000465 0.000077 -6.0393 0.0e+00
## ar1 0.151054 0.011107 13.6002 0.0e+00
## mxreg1 0.000684 0.000162 4.2108 2.5e-05
## mxreg2 0.001846 0.000147 12.5979 0.0e+00
## mxreg3 0.001731 0.000136 12.7175 0.0e+00
## mxreg4 0.002091 0.000136 15.3651 0.0e+00
## omega -0.112287 0.004256 -26.3852 0.0e+00
## alpha1 -0.069959 0.005730 -12.2089 0.0e+00
## beta1 0.988273 0.000426 2318.9295 0.0e+00
## gamma1 0.188426 0.003152 59.7759 0.0e+00
## shape 6.130714 0.355226 17.2586 0.0e+00
##
## LogLikelihood : 43041.91
##
## Information Criteria
## ------------------------------------
##
## Akaike -6.6206
## Bayes -6.6143
## Shibata -6.6207
## Hannan-Quinn -6.6185
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.2573 0.611984
## Lag[2*(p+q)+(p+q)-1][2] 1.5649 0.402142
## Lag[4*(p+q)+(p+q)-1][5] 10.0113 0.001084
## d.o.f=1
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 17.54 2.812e-05
## Lag[2*(p+q)+(p+q)-1][5] 18.39 5.353e-05
## Lag[4*(p+q)+(p+q)-1][9] 20.85 1.210e-04
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.04041 0.500 2.000 0.8407
## ARCH Lag[5] 0.35858 1.440 1.667 0.9243
## ARCH Lag[7] 3.11321 2.315 1.543 0.4924
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 56.1468
## Individual Statistics:
## mu 0.6757
## ar1 39.7524
## mxreg1 0.5355
## mxreg2 0.1708
## mxreg3 0.2314
## mxreg4 1.6514
## omega 2.9178
## alpha1 6.5205
## beta1 2.7010
## gamma1 0.3597
## shape 0.8294
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 2.49 2.75 3.27
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 2.6699 7.596e-03 ***
## Negative Sign Bias 0.8666 3.862e-01
## Positive Sign Bias 1.0909 2.753e-01
## Joint Effect 23.0967 3.855e-05 ***
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 158.5 5.044e-24
## 2 30 191.6 6.993e-26
## 3 40 226.4 2.896e-28
## 4 50 242.9 1.721e-27
##
##
## Elapsed time : 15.23828
Tabla comparativa de los p-valores de los external regressors para los dos mejores modelos.
El primer modelo seleccionado es gjrGARCH(1,1) con ARMA(1,0) como modelo de media y distribución std. Se han incluido regresores externos como variables dummys tanto en media como en varianza.
t_modelo_nasdaq2 <- print(round(garch_nasdaq2_2er_ar1@fit$matcoef,6), digits = 5)
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000453 0.000099 -4.550297 0.000005
## ar1 0.151053 0.007416 20.369500 0.000000
## mxreg1 0.000665 0.000021 31.503561 0.000000
## mxreg2 0.001829 0.000148 12.350793 0.000000
## mxreg3 0.001734 0.000151 11.478805 0.000000
## mxreg4 0.002094 0.000159 13.189218 0.000000
## omega 0.000001 0.000000 3.136710 0.001709
## alpha1 0.056884 0.002532 22.468485 0.000000
## beta1 0.890673 0.001950 456.639688 0.000000
## gamma1 0.092596 0.003286 28.179407 0.000000
## vxreg1 0.000000 0.000000 1.026186 0.304804
## vxreg2 0.000000 0.000000 0.348084 0.727777
## vxreg3 0.000000 0.000000 0.000231 0.999816
## vxreg4 0.000000 0.000000 0.035045 0.972044
## shape 6.090970 0.256353 23.760129 0.000000
kable(t_modelo_nasdaq2, row.names = TRUE)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| mu | -0.000453 | 0.000099 | -4.550297 | 0.000005 |
| ar1 | 0.151053 | 0.007416 | 20.369500 | 0.000000 |
| mxreg1 | 0.000665 | 0.000021 | 31.503561 | 0.000000 |
| mxreg2 | 0.001829 | 0.000148 | 12.350793 | 0.000000 |
| mxreg3 | 0.001734 | 0.000151 | 11.478805 | 0.000000 |
| mxreg4 | 0.002094 | 0.000159 | 13.189218 | 0.000000 |
| omega | 0.000001 | 0.000000 | 3.136710 | 0.001709 |
| alpha1 | 0.056884 | 0.002532 | 22.468485 | 0.000000 |
| beta1 | 0.890673 | 0.001950 | 456.639688 | 0.000000 |
| gamma1 | 0.092596 | 0.003286 | 28.179407 | 0.000000 |
| vxreg1 | 0.000000 | 0.000000 | 1.026186 | 0.304804 |
| vxreg2 | 0.000000 | 0.000000 | 0.348084 | 0.727777 |
| vxreg3 | 0.000000 | 0.000000 | 0.000231 | 0.999816 |
| vxreg4 | 0.000000 | 0.000000 | 0.035045 | 0.972044 |
| shape | 6.090970 | 0.256353 | 23.760129 | 0.000000 |
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
t_modelo2 <- knitr::kable(t_modelo_nasdaq2,
digits = 6,
caption = "Modelo gjrGARCH(1,1) con ARMA(1,0)", booktabs = TRUE) %>%
kable_styling(font_size = 11)
column_spec(t_modelo2, 1:5, width = "1em")#, bold = TRUE, italic = TRUE)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| mu | -0.000453 | 0.000099 | -4.550297 | 0.000005 |
| ar1 | 0.151053 | 0.007416 | 20.369500 | 0.000000 |
| mxreg1 | 0.000665 | 0.000021 | 31.503561 | 0.000000 |
| mxreg2 | 0.001829 | 0.000148 | 12.350793 | 0.000000 |
| mxreg3 | 0.001734 | 0.000151 | 11.478805 | 0.000000 |
| mxreg4 | 0.002094 | 0.000159 | 13.189218 | 0.000000 |
| omega | 0.000001 | 0.000000 | 3.136710 | 0.001709 |
| alpha1 | 0.056884 | 0.002532 | 22.468485 | 0.000000 |
| beta1 | 0.890673 | 0.001950 | 456.639688 | 0.000000 |
| gamma1 | 0.092596 | 0.003286 | 28.179407 | 0.000000 |
| vxreg1 | 0.000000 | 0.000000 | 1.026186 | 0.304804 |
| vxreg2 | 0.000000 | 0.000000 | 0.348084 | 0.727777 |
| vxreg3 | 0.000000 | 0.000000 | 0.000231 | 0.999816 |
| vxreg4 | 0.000000 | 0.000000 | 0.035045 | 0.972044 |
| shape | 6.090970 | 0.256353 | 23.760129 | 0.000000 |
De acuerdo a los p-valores de los regresores externos se observa que son significativos. Si se analizan los valores estimados para cada día de la semana se ve que el día martes posee un valor explicativo del 0.01 y los días miércoles, jueves y viernes de 0.02. De acuerdo al valor de \(alpha1\) el rendimiento es explicado en un 5.69% por la volatilidad del día anterior. De acuerdo al valor de \(beta1\) el rendimiento es explicado en un 89% por la varianza ajustada del día anterior.
El siguiente modelo seleccionado es eGARCH(1,1) con ARMA(1,0) como modelo de media y distribución std.
Se han incluido regresores externos como variables dummys tanto en media como en varianza.
t_modelo_nasdaq3 <- print(round(garch_nasdaq3_2er_ar1@fit$matcoef,6), digits = 5)
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000476 0.000132 -3.60591 0.000311
## ar1 0.152379 0.008952 17.02139 0.000000
## mxreg1 0.000694 0.000175 3.96135 0.000075
## mxreg2 0.001864 0.000195 9.54566 0.000000
## mxreg3 0.001754 0.000176 9.95558 0.000000
## mxreg4 0.002096 0.000172 12.21316 0.000000
## omega 0.034641 0.045165 0.76700 0.443083
## alpha1 -0.069909 0.005401 -12.94409 0.000000
## beta1 0.988178 0.000346 2859.51045 0.000000
## gamma1 0.188443 0.001701 110.75611 0.000000
## vxreg1 -0.073706 0.078599 -0.93774 0.348377
## vxreg2 -0.191688 0.063771 -3.00587 0.002648
## vxreg3 -0.208510 0.063876 -3.26428 0.001097
## vxreg4 -0.265811 0.078080 -3.40434 0.000663
## shape 6.145769 0.327160 18.78523 0.000000
kable(t_modelo_nasdaq3, row.names = TRUE)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| mu | -0.000476 | 0.000132 | -3.605914 | 0.000311 |
| ar1 | 0.152379 | 0.008952 | 17.021386 | 0.000000 |
| mxreg1 | 0.000694 | 0.000175 | 3.961353 | 0.000075 |
| mxreg2 | 0.001864 | 0.000195 | 9.545657 | 0.000000 |
| mxreg3 | 0.001754 | 0.000176 | 9.955580 | 0.000000 |
| mxreg4 | 0.002096 | 0.000172 | 12.213163 | 0.000000 |
| omega | 0.034641 | 0.045165 | 0.766997 | 0.443083 |
| alpha1 | -0.069909 | 0.005401 | -12.944089 | 0.000000 |
| beta1 | 0.988178 | 0.000346 | 2859.510447 | 0.000000 |
| gamma1 | 0.188443 | 0.001701 | 110.756112 | 0.000000 |
| vxreg1 | -0.073706 | 0.078599 | -0.937741 | 0.348377 |
| vxreg2 | -0.191688 | 0.063771 | -3.005874 | 0.002648 |
| vxreg3 | -0.208510 | 0.063876 | -3.264277 | 0.001097 |
| vxreg4 | -0.265811 | 0.078080 | -3.404338 | 0.000663 |
| shape | 6.145769 | 0.327160 | 18.785226 | 0.000000 |
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
t_modelo3 <- knitr::kable(t_modelo_nasdaq3,
digits = 6,
caption = "Modelo eGARCH(1,1) con ARMA(1,0)", booktabs = TRUE) %>%
kable_styling(font_size = 11)
column_spec(t_modelo3, 1:5, width = "1em")#, bold = TRUE, italic = TRUE)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| mu | -0.000476 | 0.000132 | -3.605914 | 0.000311 |
| ar1 | 0.152379 | 0.008952 | 17.021386 | 0.000000 |
| mxreg1 | 0.000694 | 0.000175 | 3.961353 | 0.000075 |
| mxreg2 | 0.001864 | 0.000195 | 9.545657 | 0.000000 |
| mxreg3 | 0.001754 | 0.000176 | 9.955580 | 0.000000 |
| mxreg4 | 0.002096 | 0.000172 | 12.213163 | 0.000000 |
| omega | 0.034641 | 0.045165 | 0.766997 | 0.443083 |
| alpha1 | -0.069909 | 0.005401 | -12.944089 | 0.000000 |
| beta1 | 0.988178 | 0.000346 | 2859.510447 | 0.000000 |
| gamma1 | 0.188443 | 0.001701 | 110.756112 | 0.000000 |
| vxreg1 | -0.073706 | 0.078599 | -0.937741 | 0.348377 |
| vxreg2 | -0.191688 | 0.063771 | -3.005874 | 0.002648 |
| vxreg3 | -0.208510 | 0.063876 | -3.264277 | 0.001097 |
| vxreg4 | -0.265811 | 0.078080 | -3.404338 | 0.000663 |
| shape | 6.145769 | 0.327160 | 18.785226 | 0.000000 |
Para este modelo también se observa que los p-valores de los regresores son significativos y que el poder explicativo de los días de la semana es igual que en el modelo anterior.
De acuerdo al valor de \(alpha1\) el rendimiento es explicado en un 6.99% por la volatilidad del día anterior. De acuerdo al valor de \(beta1\) el rendimiento es explicado en un 98.8% por la varianza ajustada del día anterior.
Por lo tanto se asume que el eGARCH(1,1) con ARMA(1,0) podría ser una alternativa para realizar pronósticos de los rendimientos de NASDAQ.
Para el dataset NASDAQ se concluye que la significancia de las variables y los porcentajes dan muy similares entre la regresión mínimo cuadrática y los modelos GARCH. Se considera conveniente incorporar los GARCH porque los coeficientes de \(alpha1\) y \(beta1\) dan significativos, y esto ademas permite ver el comportamiento de la varianza.